#ifndef GC_ILP_OBJECT_H
#define GC_ILP_OBJECT_H

#include <ilp.h>

#define N 1

typedef enum { WHITE, GREY, BLACK } Mark;

typedef struct {
  ILP_Object obj;
  Mark mark;
  int is_free;
  ILP_Object * next_free;
} gc_ilp_object;

/* -initialisation du pointeur vers la free list
   -init debut tas avec brk
   -init du debut de la pile avec variable local /fonction
 */
void GC_init();

/* -on fait un mark_and_sweep toutes les 
    N allocations 

    -regarder si la free_list est vide
     yes: alloue avec sbrk (se servir de sbrk pour
                            detecter les erreurs.
     no: rend le 1er element, met a jour la free_list.
*/
void *GC_malloc(size_t size);

void find_root_set();

#endif /* GC_ILP_OBJECT_H */
